EclipseRCP 사용자 정의 다이얼로그 사용하기.( EclipseRCP SWT Custom dialog)[Custom Dialog,이클립스 RCP,eclipse RCP]

이미지출처 : www.mobilefish.com

EclipseRCP 사용자 정의 다이얼로그 사용하기.( EclipseRCP SWT Custom dialog)







SWT에서는 다음의 5가지 Dialog를 제공하고 있다.


  • ColorDialog
  • DirectoryDialog
  • FileDialog
  • FontDialog
  • MessageBox


하지만 필요에따라 자신만의 Dialog를 만들어 쓸 일이 생기는데..



간단한 SlideDialog의 예제로 알아보자.



Code:


private IWorkbenchWindow window;

  private Shell customDialog;

  private Button buttonOK;

  private Button buttonCancel;

  private boolean isSetting;

  private float density;

 

    private Listener listener = new Listener() {

        public void handleEvent(Event event) {

          if (event.widget == buttonOK) {

            isSetting = true;

          } else {

            isSetting = false;

          }

          customDialog.close();

          customDialog.dispose();

        }

 

      };

     

    private void initialize() {

      customDialog = new Shell(window.getShell(), SWT.APPLICATION_MODAL| SWT.DIALOG_TRIM);

    customDialog.setText("Setting Density");

    customDialog.setSize(210, 100);

   

    buttonOK = new Button(customDialog, SWT.PUSH);

      buttonOK.setText("OK");

      buttonOK.setBounds(10, 40, 80, 25);

 

      buttonCancel = new Button(customDialog, SWT.PUSH);

      buttonCancel.setText("Cancel");

      buttonCancel.setBounds(110, 40, 80, 25);

     

      final Slider slider = new Slider (customDialog, SWT.HORIZONTAL);

      slider.setBounds (10, 10, 180, 24);

      slider.setIncrement(10);

      slider.setMaximum(109);

      slider.setToolTipText("MIN <--!--> MAX");

      buttonOK.addListener(SWT.Selection, listener);

      buttonCancel.addListener(SWT.Selection, listener);

    slider.addListener (SWT.Selection, new Listener () {

      public void handleEvent (Event event) {

        density = slider.getSelection()*0.01f;

      }

    });

    }

  public void run(IAction action) {

    initialize();

    customDialog.open();

 

    // sleep during dialog work. dialog 가 닫힐때까지 기다리게 해준다.

     while (!customDialog.isDisposed()) {

          if (!window.getShell().getDisplay().readAndDispatch())

            window.getShell().getDisplay().sleep();

        }

 

     if(isSetting) {

        System.out.println("Density : "+density);

      }

  }


코드 후반의 while문 부분이 없다면, Dialog에서 어떤 조작을 하기도 전에 if문이 실행되버리니 유의해야 한다.